package com.wxapp.market.service.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wxapp.common.constant.base.IBaseService;
import com.wxapp.common.constant.pojo.vm.ResultVm;
import com.wxapp.common.constant.pojo.vo.UserVo;
import com.wxapp.common.core.filter.except.ThrowMyException;
import com.wxapp.common.util.condition.ConditionUtil;
import com.wxapp.common.util.copy.CopyUtil;
import com.wxapp.common.util.file.FileUtil;
import com.wxapp.market.api.pojo.entity.AdFileDO;
import com.wxapp.market.api.pojo.vm.adFile.PAdFileDetailVm;
import com.wxapp.market.api.pojo.vm.adFile.PAdFilePageVm;
import com.wxapp.market.api.pojo.vo.adFile.QAdFileAddVo;
import com.wxapp.market.api.pojo.vo.adFile.QAdFilePageVo;
import com.wxapp.market.api.pojo.vo.adFile.QAdFileUpdateVo;
import com.wxapp.market.service.mapper.AdFileMapper;
import com.wxapp.market.service.service.AdFileService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

/**
 * Description
 * @author lgl
 * DateTime  2024/1/25 17:27
 * Modified By
 */
@Service
@RequiredArgsConstructor
public class AdFileServiceImpl extends IBaseService implements AdFileService {
    private final AdFileMapper adFileMapper;

    @Override
    public ResultVm<String> add(QAdFileAddVo qAdFileAddVo, UserVo userVo) {
        var adf = CopyUtil.copyObjectNew(qAdFileAddVo, AdFileDO::new, (s, r) ->{
            r.setType(FileUtil.getFileType(qAdFileAddVo.getFileUrl()));
            r.setCreateBy(userVo.getId());
            return null;
        });
        adFileMapper.insert(adf);
        return success();
    }

    @Override
    public ResultVm<String> update(QAdFileUpdateVo qAdFileUpdateVo, UserVo userVo) throws ThrowMyException {
        var adFile = getAdFile(qAdFileUpdateVo.getId());
        CopyUtil.copyObject(qAdFileUpdateVo, adFile, (s, r) -> {
            r.setUpdateBy(userVo.getId());
            return null;
        });
        adFileMapper.updateById(adFile);
        return success("更新成功");
    }

    @Override
    public ResultVm<IPage<PAdFilePageVm>> getPage(QAdFilePageVo qAdFilePageVo) {
        var page = ConditionUtil.getPage(qAdFilePageVo, AdFileDO.class);
        IPage<PAdFilePageVm> selectPage = adFileMapper.selectPageList(page, qAdFilePageVo);
        return success(selectPage);
    }

    @Override
    public ResultVm<String> delete(String id) throws ThrowMyException {
        var adFile = getAdFile(id);
        adFile.setStatus(false);
        adFileMapper.updateById(adFile);
        return success("删除成功");
    }

    @Override
    public ResultVm<PAdFileDetailVm> detail(String id) throws ThrowMyException {
        var adFile = getAdFile(id);
        return success(CopyUtil.copyObjectNew(adFile, PAdFileDetailVm::new, null));
    }

    private AdFileDO getAdFile(String id) throws ThrowMyException {
        var adFile = adFileMapper.selectById(id);
        if (adFile == null) {
            throw new ThrowMyException("没有找到文件");
        }
        return adFile;
    }
}
